package dxf.entities;


import dxf.DXFPoint;
import dxf.annotations.DXFPointProperty;
import dxf.annotations.DXFProperty;

/**
 * Un oggetto della classe <code>Text</code> definisce una Entity Text di un disegno DXF
 *
 * @author Andrea Zonca
 * @author Michele Brignoli
 * @version 1.0
 */
public class Text extends Entity {

	public static final String TEXT_STYLE_STANDARD="STANDARD";
	public static final int TEXT_MIRRORING_STANDARD_FLAG=0;
	public static final int TEXT_MIRRORING_BACKWARDS_FLAG=2;
	public static final int TEXT_MIRRORING_UPSIDEDOWN_FLAG=4;

	public static final int JUSTIFICATION_LEFT=0;
	public static final int JUSTIFICATION_CENTER=1;
	public static final int JUSTIFICATION_RIGHT=2;
	public static final int JUSTIFICATION_ALIGNED=3;
	public static final int JUSTIFICATION_MIDDLE=4;
	public static final int JUSTIFICATION_FIT=5;

	public static final int VALIGN_BASELINE=0;
	public static final int VALIGN_BOTTOM=1;
	public static final int VALIGN_MIDDLE=2;
	public static final int VALIGN_TOP=3;

	@DXFProperty(100)
	private String entityMarker="AcDbText";

	@DXFProperty(39)
	private int thickness=0;

	@DXFPointProperty(xCode=10,yCode=20,zCode=30)
	private DXFPoint alignmentStart;

	@DXFProperty(40)
	private int textHeight=1;

	@DXFProperty(1)
	private String text;

	@DXFProperty(50)
	private int textRotation=0;

	@DXFProperty(7)
	private String textStyle=TEXT_STYLE_STANDARD;

	@DXFProperty(71)
	private int textMirroring=TEXT_MIRRORING_STANDARD_FLAG;

	@DXFProperty(72)
	private int justification=JUSTIFICATION_LEFT;

	@DXFPointProperty(xCode=11,yCode=21,zCode=31)
	private DXFPoint alignmentEnd;

	@DXFProperty(100)
	private String subMarker="AcDbText";

	@DXFProperty(73)
	private int verticalAlignment;


	/**
	 * Crea un'istanza di Text
	 * @param text il testo da visualizzare
	 * @param alignmentStart
	 */
	public Text(String text, DXFPoint alignmentStart){
		this.text=text;
		// We share the same point as that JUST WORKS(tm).
		this.alignmentStart=alignmentStart;
		this.alignmentEnd=alignmentStart;
	}


	public String getEntityMarker(){
		return entityMarker;
	}

	/**
	 * restituisce lo spessore del testo
	 * @return lo spessore del testo
	 */
	public int getThickness() {
		return thickness;
	}

	/**
	 * Imposta lo spessore del testo
	 * @param thickness lo spessore del testo
	 */
	public void setThickness(int thickness) {
		this.thickness = thickness;
	}

	/**
	 * Restituisce il punto di allineamento
	 * @return il punto di allineamento
	 */
	public DXFPoint getAlignmentStart() {
		return alignmentStart;
	}


	/**
	 * Restituisce l'altezza del testo
	 * @return l'altezza del testo
	 */
	public int getTextHeight() {
		return textHeight;
	}


	/**
	 * imposta l'altezza del testo
	 * @param textHeight l'altezza del testo
	 */
	public void setTextHeight(int textHeight) {
		this.textHeight = textHeight;
	}


	/**
	 * restituisce la stringa di testo
	 * @return il testo da visualizzare
	 */
	public String getText() {
		return text;
	}


	/**
	 * imposta il testo da visualizzare
	 * @param text il testo da visualizzare
	 */
	public void setText(String text) {
		this.text = text;
	}


	/**
	 * Restituisce la text Rotation
	 * @return la text Rotation
	 */
	public int getTextRotation() {
		return textRotation;
	}


	/**
	 * Imposta la TextRotation
	 * @param textRotation l'intero che indica la rotazione
	 */
	public void setTextRotation(int textRotation) {
		this.textRotation = textRotation;
	}


	/**
	 * Restituisce il nome del Text Style
	 * @return il text Style
	 */
	public String getTextStyle() {
		return textStyle;
	}


	/**
	 * Imposta il nome del Text Style
	 * @param textStyle lo stile del testo
	 */
	public void setTextStyle(String textStyle) {
		this.textStyle = textStyle;
	}


	/**
	 * Restituisce il textMirroring
	 * @return il textMirroring
	 */
	public int getTextMirroring() {
		return textMirroring;
	}


	/**
	 * Imposta il textMirroring
	 * @param textMirroring il text Mirroring
	 */
	public void setTextMirroring(int textMirroring) {
		this.textMirroring = textMirroring;
	}


	/**
	 * Restituisce la giustificazione del testo
	 * @return la giustificazione del testo
	 */
	public int getJustification() {
		return justification;
	}


	/**
	 * Imposta la giustificazione del testo
	 * @param justification la giustificazione
	 */
	public void setJustification(int justification) {
		this.justification = justification;
	}


	/**
	 * Restituisce il punto di allineamento
	 * @return il punto di allineamento
	 */
	public DXFPoint getAlignmentEnd() {
		return alignmentEnd;
	}

	/**
	 * Restituisce il Subclass marker
	 * @return il subclass marker
	 */
	public String getSubMarker() {
		return subMarker;
	}


	/**
	 * Restituisce la giustificazione verticale del testo
	 * @return il vertical Alignment
	 */
	public int getVerticalAlignment() {
		return verticalAlignment;
	}

	/**
	 * Imposta la giustificazione verticale del testo
	 * @param verticalAlignment la giustificazione verticale
	 */
	public void setVerticalAlignment(int verticalAlignment) {
		this.verticalAlignment = verticalAlignment;
	}

}
